class WikiPlugin
  @@initialized = {}
  def initialize converter
    @content = converter.content
    @params = converter.params

    # 初期化は一度だけ行う
    if @@initialized[self.class.to_s].nil? then
      init
      @@initialized[self.class.to_s] = true
    end
  end

  def wiki_plugin?
    true
  end

  def init
  end

  #
  # ブロックタイプHTMLとして表示されるモード
  #
  # @return String 画面に表示する文字列
  #
  def convert
  end

  #
  # インラインHTMLとして表示されるモード
  #
  # @return String 画面に表示する文字列
  #
  def inline
  end

  #
  # URLでアクセスして実行するモード
  #
  # @return {
  #           :refer => 実行後のリダイレクト先ページ名（:body が空の場合のみリダイレクトを行う）,
  #           :msg   => 実行後にメッセージ表示欄に表示される文字列,
  #           :body  => 実行後に本文として表示される文字列,
  #         }
  #
  def action
  end

  #
  # デストラクタ(レンダラなどの他のオブジェクトから呼ばれる)
  #
  def final
    @@initialized = {}
  end

#  #
#  # 指定したプラグインを作成して返す
#  #
#  # @input  string plugin_name プラグイン名
#  # @input  Object renderer    レンダラーオブジェクト
#  # @return Object wiki_plugin プラグインオブジェクト
#  #
#  private
#  class Factory
#    def self.create plugin_name,renderer
#      wiki_plugin = eval(plugin_name.split('_').map{|w| w.capitalize}.join('') + ".new renderer")
#      if wiki_plugin.wiki_plugin? then
#        wiki_plugin
#      else
#        nil
#      end
#    end
#  end
end
